// 路由守卫配置
import { authUtils } from './auth.js'

// 无需登录的页面列表
const whiteList = [
  'pages/login/login',
  'pages/register/register', 
  'pages/privacy/privacy'
]

// 路由拦截器
export const routeGuard = {
  // 页面跳转前检查
  beforeEach(to) {
    // 检查URL是否有效
    if (!to || typeof to !== 'string') {
      console.warn('路由守卫: 无效的URL:', to)
      return false
    }
    
    const isInWhiteList = whiteList.some(page => to.includes(page))
    
    // 如果在白名单中，直接通过
    if (isInWhiteList) {
      return true
    }
    
    // 检查登录状态
    if (!authUtils.isLoggedIn()) {
      // 未登录，重定向到登录页
      console.log('路由守卫: 用户未登录，重定向到登录页')
      // 使用nextTick确保在下一个事件循环中执行
      uni.$nextTick(() => {
        uni.reLaunch({
          url: '/pages/login/login'
        })
      })
      return false
    }
    
    return true
  }
}

// 初始化路由守卫
export function initRouterGuard() {
  console.log('初始化路由守卫...')
  
  // 避免重复初始化
  if (uni._routeGuardInited) {
    console.log('路由守卫已初始化，跳过重复初始化')
    return
  }
  
  // 保存原始方法
  const originalNavigateTo = uni.navigateTo
  const originalReLaunch = uni.reLaunch
  const originalRedirectTo = uni.redirectTo
  const originalSwitchTab = uni.switchTab
  
  // 拦截navigateTo
  uni.navigateTo = function(options) {
    if (!options || !options.url) {
      console.warn('navigateTo: 缺少URL参数')
      return
    }
    
    if (!routeGuard.beforeEach(options.url)) {
      console.log('navigateTo 被路由守卫拦截:', options.url)
      return Promise.reject(new Error('路由被拦截'))
    }
    return originalNavigateTo.call(this, options)
  }
  
  // 拦截reLaunch - 特殊处理，避免死循环
  uni.reLaunch = function(options) {
    if (!options || !options.url) {
      console.warn('reLaunch: 缺少URL参数')
      return
    }
    
    // reLaunch到登录页时不拦截，避免死循环
    if (options.url.includes('/pages/login/login')) {
      return originalReLaunch.call(this, options)
    }
    
    if (!routeGuard.beforeEach(options.url)) {
      console.log('reLaunch 被路由守卫拦截:', options.url)
      return Promise.reject(new Error('路由被拦截'))
    }
    return originalReLaunch.call(this, options)
  }
  
  // 拦截redirectTo
  uni.redirectTo = function(options) {
    if (!options || !options.url) {
      console.warn('redirectTo: 缺少URL参数')
      return
    }
    
    // redirectTo到登录页时不拦截
    if (options.url.includes('/pages/login/login')) {
      return originalRedirectTo.call(this, options)
    }
    
    if (!routeGuard.beforeEach(options.url)) {
      console.log('redirectTo 被路由守卫拦截:', options.url)
      return Promise.reject(new Error('路由被拦截'))
    }
    return originalRedirectTo.call(this, options)
  }
  
  // 拦截switchTab
  uni.switchTab = function(options) {
    if (!options || !options.url) {
      console.warn('switchTab: 缺少URL参数')
      return
    }
    
    if (!routeGuard.beforeEach(options.url)) {
      console.log('switchTab 被路由守卫拦截:', options.url)
      return Promise.reject(new Error('路由被拦截'))
    }
    return originalSwitchTab.call(this, options)
  }
  
  // 标记已初始化
  uni._routeGuardInited = true
  console.log('路由守卫初始化完成')
}